﻿using System;
// 当使用委托时，一般会出现两种角色：广播者和订阅者。
// 广播者时包含委托字段的类，它决定何时调用委托广播。
// 订阅者时方法目标的接收者，通过在广播者的委托上调用+=和-=，决定何时开始和结束监听。一个订阅者不知道也不干涉其他的订阅者。
// 事件是使这一模式正式化的语言形态。事件是显示委托中广播/订阅者需要的子特性的结构。使用事件的主要目的在于：保护订阅互不影响。

namespace _091_事件
{
    // 声明事件最简单的方法是，在委托成员的前面加上event关键字：
    // Delegate definition
    public delegate void PriceChangedHandler(decimal oldPrice, decimal newPrice);
    public class Broadcaster
    {
        //Event declaration
        public event PriceChangedHandler PriceChanged;
    }
    // Broadcaster类中的代码对Process有完全访问权限，并把它看作一个委托。Broadcaster类外面的代码只能在Progress事件上执行+=和-=操作。
    /*public class Broadcaster
    {
        public event ProgressReporter Progress;
    }*/
    //add和remove关键字表示了明确的事件访问器，类似于属性访问器的行为。
    //编译器在Broadcaster类里面除了找到=+和-=外还有对PriceChanged的引用

    class Program
    {
        static void Main(string[] args)
        {
        }
    }
}
